#ifndef ISISTEMA_H
#define ISISTEMA_H

#include "Cadena.h"
#include "Iterador.h"
#include "Puntero.h"
#include "TipoRetorno.h"
#include "Tupla.h"
#include "ICiudad.h"
#include "IExcursion.h"
#include "ICliente.h"

class ISistema abstract
{
public:
	virtual ~ISistema(){}

	// Tipo 1
	virtual TipoRetorno IngresoCiudad(Cadena nombre, nat costoDiario) abstract;
	virtual TipoRetorno IngExcItinerario(nat nroExcursion, Cadena fechaPartida, Puntero<Iterador<Tupla<Cadena, nat>>> ciudades) abstract;
	virtual TipoRetorno IngresoCliente(Cadena ci, Cadena nombre, Cadena fechaRegistro) abstract;
	virtual TipoRetorno CompraExcursion(Cadena ciCliente, nat nroExcursion) abstract;
	virtual Tupla<TipoRetorno, Puntero<Iterador<pCiudad>>> ListCiudades() abstract;
	virtual Tupla<TipoRetorno, Puntero<Iterador<pCliente>>> ListClientes() abstract;
	virtual Tupla<TipoRetorno, Puntero<Iterador<pExcursion>>> ListExcursiones() abstract;

	// Tipo 2
	virtual TipoRetorno BajaCliente(Cadena ci) abstract;
	virtual Tupla<TipoRetorno, Puntero<Iterador<Tupla<pCiudad, nat>>>, nat> ConsExcursion(nat nroExcursion) abstract;
	virtual Tupla<TipoRetorno, pCliente, Puntero<Iterador<pExcursion>>> ConsCliente(Cadena ci) abstract;
	virtual Tupla<TipoRetorno, pCiudad, Puntero<Iterador<pExcursion>>> ConsCiudad(Cadena nombreCiudad) abstract;
	virtual Tupla<TipoRetorno, pCliente> MejorCliente() abstract;
};

#endif
